'''
最大回文：
回文是顺序和逆序都一样，比如aba，12321。
从一个中间点往左右展开，如果一致就继续。
可能有121，或者1221这种情况，需要分别判断。
'''

def longestPalindrome(s: str) -> str:
    def expandAroundCenter(left: int, right: int) -> str:
        # 通过一个中心点，向左右展开，如果每次迭代都一样则继续。
        while left >= 0 and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left + 1:right]

    if not s:
        return ""

    longest = ""
    for i in range(len(s)):
        # 奇数长度的回文子串
        palindrome1 = expandAroundCenter(i, i)
        # 偶数长度的回文子串
        palindrome2 = expandAroundCenter(i, i + 1)
        print(f"str1:{palindrome1}, str2:{palindrome2}")
        # 取较长的回文子串
        longer = palindrome1 if len(palindrome1) > len(palindrome2) else palindrome2
        # 记录最长的字符串
        if len(longer) > len(longest):
            longest = longer

    return longest

# 测试用例
def test_longestPalindrome():
    # 测试用例 1
    s1 = "babad"
    print(f"Test case 1: {longestPalindrome(s1)}")  # 预期输出: "bab" 或 "aba"

    # 测试用例 2
    s2 = "cbbd"
    print(f"Test case 2: {longestPalindrome(s2)}")  # 预期输出: "bb"

    # 测试用例 3
    s3 = "a"
    print(f"Test case 3: {longestPalindrome(s3)}")  # 预期输出: "a"

    # 测试用例 4
    s4 = "ac"
    print(f"Test case 4: {longestPalindrome(s4)}")  # 预期输出: "a" 或 "c"

    # 测试用例 5
    s5 = "racecar"
    print(f"Test case 5: {longestPalindrome(s5)}")  # 预期输出: "racecar"

# 运行测试用例
test_longestPalindrome()